#include "SportView.h"
// 图片资源
extern "C" {
	LV_IMG_DECLARE(ui_img_hiking);
	LV_IMG_DECLARE(ui_img_swiming);
	LV_IMG_DECLARE(ui_img_training);
	LV_IMG_DECLARE(ui_img_running);
}

SportView::SportView() :m_items{ 
	{&ui_img_hiking,"Hiking","Basic"},
	{&ui_img_swiming,"Pool Swiming","Basic"},
	{&ui_img_training,"Weight Training","Basic"},
	{&ui_img_running,"Trail Running","Basic"},
	{&ui_img_running,"Trail 2","Basic"} }
{
}

void SportView::Create(lv_obj_t* body) {
	
	uint32_t item_h = 104;
	lv_obj_t* div = lv_obj_create(body);
	lv_obj_set_size(div, DISP_VER_RES, DISP_HOR_RES);
	lv_obj_set_scroll_dir(div, LV_DIR_VER); // 垂直滚动
	lv_obj_set_scrollbar_mode(div, LV_SCROLLBAR_MODE_OFF); // 不显示滚动条
	lv_obj_set_style_bg_opa(div, 0, LV_PART_MAIN); // 完全透明
	 
	for (uint8_t i=0; i< sizeof(m_items) / sizeof(SportItem);i++)
	{
		CreateItem(div, item_h, 20,i);
	}
	
}

void SportView::CreateItem(lv_obj_t* parent, uint32_t item_h, uint32_t offset_y, uint8_t index) {

	lv_obj_t* div = lv_obj_create(parent);
	lv_obj_set_size(div, 466, item_h);
	lv_obj_set_pos(div, 0, offset_y);
	lv_obj_add_flag(div, LV_OBJ_FLAG_HIDDEN);
	lv_obj_clear_flag(div, LV_OBJ_FLAG_SCROLLABLE);
	lv_obj_set_style_bg_opa(div, 0, LV_PART_MAIN);

	lv_obj_t* icon = lv_img_create(div);
	lv_img_set_src(icon, m_items[index].img);
	lv_obj_set_size(icon, LV_SIZE_CONTENT, LV_SIZE_CONTENT);
	lv_obj_set_align(icon, LV_ALIGN_CENTER);
	lv_obj_set_pos(icon, -104, 0);
	lv_obj_clear_flag(icon, LV_OBJ_FLAG_SCROLLABLE);

	lv_obj_t* div_name = lv_obj_create(div);
	lv_obj_set_size(div_name, 180, item_h);
	lv_obj_set_pos(div_name, 60, 0);
	lv_obj_set_align(div_name, LV_ALIGN_CENTER);
	lv_obj_clear_flag(div_name, LV_OBJ_FLAG_SCROLLABLE);
	lv_obj_set_style_bg_opa(div_name, 0, LV_PART_MAIN);

	lv_obj_t* name = lv_label_create(div_name);
	lv_obj_clear_flag(name, LV_OBJ_FLAG_SCROLLABLE);
	lv_obj_set_pos(name, 0, -13);
	lv_obj_set_align(name, LV_ALIGN_LEFT_MID);
	lv_label_set_text(name, m_items[index].name);
	lv_obj_set_style_text_color(name, lv_color_white(), LV_PART_MAIN);
	lv_obj_set_style_text_font(name, &lv_font_montserrat_22, LV_PART_MAIN);

	lv_obj_t* desc = lv_label_create(div_name);
	lv_obj_clear_flag(desc, LV_OBJ_FLAG_SCROLLABLE);
	lv_obj_set_pos(desc, 0, 21);
	lv_obj_set_align(desc, LV_ALIGN_LEFT_MID);
	lv_label_set_text(desc, m_items[index].desc);
	lv_obj_set_style_text_color(desc, lv_color_hex(0x808080), LV_PART_MAIN);
	lv_obj_set_style_text_font(desc, &lv_font_montserrat_20, LV_PART_MAIN);

	m_items[index].obj = div;
}

void SportView::StartElemAnim() {

	uint32_t item_h = 104;

	// 动画时间线
	lv_anim_timeline_t* timeline = lv_anim_timeline_create();

	for (uint8_t i = 0; i < sizeof(m_items) / sizeof(SportItem); i++) {
		lv_anim_t anim_opa, anim_y;

		// y轴
		lv_anim_init(&anim_y); // 初始化动画类型
		lv_anim_set_var(&anim_y, m_items[i].obj); // 使用自动变量存储
		lv_anim_set_start_cb(&anim_y, [](lv_anim_t* a) { 
			lv_obj_clear_flag((lv_obj_t*)a->var, LV_OBJ_FLAG_HIDDEN); 
		});
		lv_anim_set_exec_cb(&anim_y, (lv_anim_exec_xcb_t)lv_obj_set_y);
		lv_anim_set_values(&anim_y, 0, 20+i* item_h); // 属性改变的范围
		lv_anim_set_path_cb(&anim_y, lv_anim_path_linear); // 动画效果
		lv_anim_set_time(&anim_y, 600); // 持续时间

		// 透明度
 		lv_anim_init(&anim_opa); // 初始化动画类型
 		lv_anim_set_var(&anim_opa, m_items[i].obj); // 使用自动变量存储
 		lv_anim_set_exec_cb(&anim_opa, [](void* var, int32_t v) { lv_obj_set_style_opa((lv_obj_t*)var, v, 0); });
 		lv_anim_set_values(&anim_opa, 0, 255); // 属性改变的范围
 		lv_anim_set_path_cb(&anim_opa, lv_anim_path_linear); // 动画效果
 		lv_anim_set_time(&anim_opa, 100); // 持续时间

		// 添加动画到时间线上
		lv_anim_timeline_add(timeline, 0, &anim_y);
		lv_anim_timeline_add(timeline, 0, &anim_opa);
	}

	// 执行时间线
	lv_anim_timeline_start(timeline);
}
